package com.hsgene.order.persistence;

import com.hsgene.order.domain.disease.GeneticDisease;
import com.hsgene.order.domain.reserve.DifuPeopleInfo;
import com.hsgene.order.domain.reserve.DoctorOrderInfo;
import com.hsgene.order.domain.reserve.ReserveOrderInfoDto;
import com.hsgene.order.domain.reserve.product.GeneticTestingProductDto;
import com.hsgene.order.domain.reserve.product.ProductCancers;
import com.hsgene.order.dto.OrderSumPriceCommission;
import com.hsgene.product.domain.GeneticTestingProduct;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * 预约下单数据层接口
 */
@Repository
public interface ReserveOrderRepository {

    /**
     * 获取产品总金额
     *
     * @param ids 产品信息
     * @return
     */
    OrderSumPriceCommission getProductSumPrice(@Param("ids") List<String> ids);

    /**
     * 下单
     * @param orderId    订单id
     * @param orderNo    订单编号
     * @param userId     用户id
     * @param sum        总价和佣金
     * @param date       采样时间
     * @param orderInfo  订单信息
     * @param createTime 下单时间
     * @param name
     * @param phone
     */
    void addOrder(@Param("orderId") String orderId, @Param("orderNo") String orderNo,
                  @Param("userId") String userId, @Param("sum") OrderSumPriceCommission sum,
                  @Param("date") Date date, @Param("orderInfo") ReserveOrderInfoDto orderInfo,
                  @Param("createTime") Date createTime, @Param("name") String name, @Param("phone")String phone);

    /**
     * 医生下单基本信息
     *
     * @param id              id
     * @param orderNo         订单编号
     * @param productIds 订单信息
     * @param date            时间
     * @param remark          备注
     */
    void addDoctorOrder(@Param("id") String id, @Param("orderNo") String orderNo,@Param("cancerIds")String cancerIds,
                        @Param("productIds")String productIds, @Param("createTime") Date date,
                        @Param("remark") String remark);

    /**
     * 获取根结点信息
     *
     * @return
     */
    GeneticDisease getRootDisease();

    /**
     * 获取子节点信息
     *
     * @param rootId 根结点id
     * @return
     */
    List<GeneticDisease> getDiseaseChildren(@Param("rootId") String rootId);

    /**
     * 地服下单
     *
     * @param id           主键id
     * @param orderId      订单id
     * @param difuId      地服id
     * @param testDate     检测时间
     * @param date         下单时间
     * @param cancerId     疾病id
     * @param diseaseNames 疾病名称
     */
    void addOrderAddtionA(@Param("id") String id, @Param("orderId") String orderId, @Param("difuId") String difuId,
                          @Param("testDate") Date testDate, @Param("createTime") Date date,
                          @Param("cancerId") String cancerId, @Param("diseaseNames") String diseaseNames);

    /**
     * 订单B表插入信息
     *
     * @param id      id
     * @param orderId orderId
     * @param sum     总价
     */
    void addOrderAddtionB(@Param("id") String id, @Param("orderId") String orderId,
                          @Param("sum") OrderSumPriceCommission sum);

    /**
     * 获取套餐ID
     *
     * @param products 产品id
     * @return
     */
    List<String> getPackageIds(@Param("products") List<GeneticTestingProductDto> products);

    /**
     * 套餐id
     *
     * @param id        id
     * @param packageId 套餐id
     * @param testDate  检测时间
     * @param orderNo   订单编号
     */
    void addPackageToOrder(@Param("id") String id, @Param("packageId") String packageId,
                           @Param("testDate") Date testDate, @Param("orderNo") String orderNo,@Param("product") GeneticTestingProduct product);

    /**
     * 获取地服信息
     *
     * @param userId 用户id
     * @return
     */
    DifuPeopleInfo getDifuPeopleInfo(@Param("userId") String userId);

    /**
     * 插入用户
     *
     * @param userId   用户id
     * @param userName 用户名称
     * @param userType 用户类型
     */
    void inserUserInfo(@Param("userId") String userId, @Param("userName") String userName,
                       @Param("userType") Integer userType);

    /**
     * 疾病id
     *
     * @param cancerInfos
     * @return
     */
    String getDiseaseNameById(ProductCancers cancerInfos);
}
